package cn.stylefeng.guns.config;

import cn.stylefeng.guns.modular.system.model.Person;
import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

@Component
@Scope("prototype")
public class ImgConfig {
    @Value("${guns.file-upload-path}")
    private String tmpPath;

    public ImgConfig() {
    }

    /**
     * @return 返回图片路径
     */
    private String getTmpPath() {
        return this.tmpPath + "/img/";
    }

    /**
     * 默认路劲
     * @param name 图片名称
     * @return 返回 true 表示删除成功
     */
    //执行删除操作
    public Boolean deleteFile(String name) {
        File file = new File(getTmpPath() + name);
        if (file.exists()) {
            file.delete();
        }else {
            throw new ServiceException(500,"该文件不存在");
        }
        return true;
    }

    //执行保存操作(单个操作)
    public String writeFile(MultipartFile multipartFile) {
        String fileSavePath = getTmpPath();
        String pictureName = multipartFile.getOriginalFilename();
        File dest = new File(fileSavePath, pictureName);
        // 判断路径是否存在，不存在则新创建一个
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        if (dest.exists()) {
            throw new ServiceException(500,"图片已存在");
        }
        try {
            multipartFile.transferTo(dest);
        } catch (Exception e) {
            throw new ServiceException(500,"图片上传失败");
        }
        return pictureName;
    }
    //执行保存操作
    public List<String> writeFiles(MultipartFile[] multipartFiles) {
        List<String> list = new ArrayList();
        String fileSavePath = getTmpPath();
        for (MultipartFile picture :
                multipartFiles) {
            String originalName = picture.getOriginalFilename();
            File dest = new File(fileSavePath, originalName);
            // 判断路径是否存在，不存在则新创建一个
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs();
            }
            if (dest.exists()) {
                throw new ServiceException(500,"图片已存在");
            }
            try {
                picture.transferTo(dest);
                list.add(originalName);
            } catch (Exception e) {
                for (String name:
                        list) {
                    if (!("".equals(name) || name != null)){
                        deleteFile(name);
                    }
                }
                throw new ServiceException(500, originalName + " : 上传失败,请重新上传");
            }
        }
        return list;
    }
/****************************************************************************************************************/
    /**
     * @param url 返回自定义路径 到目录
     * @return
     */
    private String getTmpPath(String url) {
        return this.tmpPath + url;
    }
    /**
     * 自定义路径
     * @param name 图片名称
     * @param url 路径
     * @return 返回 true 表示删除成功
     */
    //执行删除操作
    public Boolean deleteFile(String name,String url) {
        File file = new File(getTmpPath(url) + name);
        if (file.exists()) {
            file.delete();
        }
        return true;
    }

    /**
     * 执行删除操作
     * @param url 绝对路径
     * @return true 表示删除成功
     */
    public Boolean deleteFileByUrl(String url) {
        File file = new File(url);
        if (file.exists()) {
            file.delete();
        }
        return true;
    }

    /**
     *
     * @param multipartFile 获取的文件
     * @param url  文件部分路径
     * @return 项目静态资源路径加文件名
     */
    //执行保存操作(单个操作)
    public String writeFile(MultipartFile multipartFile,String url) {
        String fileSavePath = getTmpPath(url);
        String pictureName = multipartFile.getOriginalFilename();
        File dest = new File(fileSavePath, pictureName);
        // 判断路径是否存在，不存在则新创建一个
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        //如何重名直接返回
        if (dest.exists()) {
            throw new ServiceException(500,"文件已存在");
        }
        try {
            multipartFile.transferTo(dest);
        } catch (Exception e) {
            throw new ServiceException(500,"图片上传失败");
        }
        return "/static"+ url + pictureName;
    }

}
